#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project ：图灵学习 
@File    ：16.线程池.py
@IDE     ：PyCharm 
@Author  ：ChenLiGao
@Date    ：2024-11-04 14:45
'''
"""
    在普通多线程案例中多数使用手动创建线程对象的方式去运行并发程序
        1.如果当前有一百个任务，那么我需要创建一百个线程对象去绑定并行任务
        2.线程对象是否可以重用
            采用线程池的方式完成复用
        3.线程对象是否能获取到任务的返回值
            无法获取
"""

from concurrent.futures import ThreadPoolExecutor # 线程池：标准库


import requests # 同步网络爬虫库：第三方包，需要自己下载
url_list = [
    "https://t10.baidu.com/it/u=579885007,232778812&fm=30&app=106&f=JPEG?w=640&h=962&s=F6B630C0048245550E2821130100E0D0",
    "https://ww2.sinaimg.cn/mw690/008Dx8Yely1hre748fydoj30u00k0q65.jpg",
    "https://ww4.sinaimg.cn/mw690/008Dx8Yely1hrniembn9pj30gf0g8tbv.jpg",
    "https://wx1.sinaimg.cn/mw690/008Dx8Yely1hrp5nr0s79j30og0ogn08.jpg",
    "https://t11.baidu.com/it/u=288090808,240015165&fm=30&app=106&f=JPEG?w=640&h=738&s=B921C9137F564EC05265395B03007033",
    "https://ww1.sinaimg.cn/mw690/008Dx8Yely1hr0gmuf5fnj31401cl1kx.jpg",
    "https://t12.baidu.com/it/u=2580020530,232668238&fm=30&app=106&f=JPEG?w=640&h=885&s=DF08A344C8F3F38449D459430100F0B1",
    "https://t10.baidu.com/it/u=174558918,233266531&fm=30&app=106&f=JPEG?w=640&h=962&s=AD84D210C71051D4D4A11D450100A0B0"
]

def get_image(url, file_name):
    response = requests.get(url).content
    with open("16images/"+str(file_name)+".png", mode="wb") as file:
        file.write(response)
        print(f"正在下载：{str(file_name)}")


with ThreadPoolExecutor(max_workers=5) as pool:
    fileName = 1
    for url in url_list:
        pool.submit(get_image, url, fileName)
        fileName += 1


"""
    1.使用上下文管理器的方式创建线程池对象
    2.创建线程池可以声明最大线程数：max_workers：默认值是cup最大核数
    3.通过线程池中的submit方法进行任务提交
"""